﻿using System;
using System.Data;
using System.Linq;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Drawing;

namespace Siav
{
    public partial class frmClientes : Form
    {
        public frmClientes()
        {
            InitializeComponent();
        }

        csControles Controlar = new csControles();
        [DllImport("DllInscE32.DLL")]
        public static extern int ConsisteInscricaoEstadual(string sIE, string sUF);
        //Entidades
        SiavEntities Entidades = new SiavEntities();

        clsEndereco.Endereco en = new clsEndereco.Endereco(); //instancia objeto do tipo endereço, para receber retornos do WS
        frmPesquisaTransportadoras Transportadoras = new frmPesquisaTransportadoras();
        //
        #region Funções
        //Funcoes

        /// <summary>
        /// Tipo de Pessoa - Física ou Juridica
        /// </summary>
        public void TipoPessoa()
        {
            var tPessoa = Entidades.TipoPessoa.ToList();
            cTipoPessoa.DataSource = tPessoa;
            cTipoPessoa.DisplayMember = "Tipo";
            cTipoPessoa.ValueMember = "TPCodigo";
        }

        /// <summary>
        /// Função para carregar os estado para o cadastro do Endereço Cliente
        /// </summary>
        public void EstadosEnderecoCliente()
        {
            ///////
            var LEstados = (from Est in Entidades.UnidadesDaFederacao
                            orderby Est.NomeUF
                            select Est).ToList();
            cCEstado.DataSource = LEstados;
            cCEstado.DisplayMember = "NomeUF";
            cCEstado.ValueMember = "SiglaUF";
            cCEstado.SelectedValue = "MT";

        }
        /// <summary>
        /// Função para carregar os estado para o cadastro do Endereço de Entrega
        /// </summary>
        public void EstadosEnderecoEntrega()
        {
            ///////
            var LEstados = (from Est in Entidades.UnidadesDaFederacao
                            orderby Est.NomeUF
                            select Est).ToList();
            cEEstado.DataSource = LEstados;
            cEEstado.DisplayMember = "NomeUF";
            cEEstado.ValueMember = "SiglaUF";
            cEEstado.SelectedValue = "MT";
        }
        /// <summary>
        /// Carrega a Lista de Cidades de acordo com o estado escolhido
        /// </summary>
        /// <param name="pCodigoEstado"></param>
        public void CidadesCliente(string pCodigoEstado)
        {

            var LCidades = (from cidade in Entidades.MunicipiosIBGE
                            where cidade.SiglaUF.Equals(pCodigoEstado)
                            orderby cidade.NomeMunicipio
                            select cidade).ToList();
            cCCidades.DataSource = LCidades;
            cCCidades.DisplayMember = "NomeMunicipio";
            cCCidades.ValueMember = "Municipio";
            cCCidades.SelectedValue = 5103403;
        }
        /// <summary>
        /// Carrega a Lista de Cidades de acordo com o estado escolhido
        /// </summary>
        /// <param name="pCodigoEstado"></param>
        public void CidadesEntrega(string pCodigoEstado)
        {
            var LCidades = (from cidade in Entidades.MunicipiosIBGE
                            where cidade.SiglaUF.Equals(pCodigoEstado)
                            orderby cidade.NomeMunicipio
                            select cidade).ToList();
            cECidades.DataSource = LCidades;
            cECidades.DisplayMember = "NomeMunicipio";
            cECidades.ValueMember = "Municipio";

            cECidades.SelectedValue = 5103403;
        }
        /// <summary>
        /// Copia o Endereço do Cliente para o endereço de entrega
        /// </summary>
        public void CopiaEnderecoParaEntrega()
        {
            tECEP.Text = tCCEP.Text;
            tELogradouro.Text = tCLogradouro.Text;
            tEComplemento.Text = tCComplemento.Text;
            tENumero.Text = tCNumero.Text;
            tEBairro.Text = tCBairro.Text;
            cEEstado.SelectedValue = cCEstado.SelectedValue;
            cECidades.SelectedValue = cCCidades.SelectedValue;
        }
        /// <summary>
        /// Retorna todos os dados da transportadora especificada pelo código
        /// </summary>
        /// <param name="pCodigoTransportadora"></param>
        public void TransportadoraDados(string pCodigoTransportadora)
        {

            if (pCodigoTransportadora == "")
            {
                MessageBox.Show("Informe o código da transportadora", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            else
            {
                try
                {
                    int Codigot = int.Parse(pCodigoTransportadora.ToString());
                    if (Codigot != -1)
                    {
                        var TTransportadoras = (from trans in Entidades.Transportadoras
                                                where trans.TCodigo.Equals(Codigot)
                                                select trans).FirstOrDefault();
                        tTranspNomeRazao.Text = TTransportadoras.NomeRazao;
                        tTranspCNPJ.Text = TTransportadoras.CPFCNPJ;
                        tTranspLogradouro.Text = TTransportadoras.Logradouro;
                        tTranspIE.Text = TTransportadoras.IERG;
                        tTranspEstado.Text = TTransportadoras.MunicipiosIBGE.NomeUF;
                        tTranspCidade.Text = TTransportadoras.MunicipiosIBGE.NomeMunicipio;
                        tTranspCodigo.Text = Codigot.ToString();
                    }
                }
                catch
                {
                    MessageBox.Show("Não existe transportadoras cadastradas com o código informado!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        public void CarregaCliente(string pCodigoCliente)
        {
            try
            {
                int Codigo = int.Parse(pCodigoCliente);
                if (Codigo != -1)
                {
                    var ClienteSelecionado = (from cliente in Entidades.Clientes
                                              where cliente.Codigo.Equals(Codigo)
                                              select cliente).FirstOrDefault();

                    tCodigoCliente.Text = ClienteSelecionado.Codigo.ToString();
                    tCNPJ.Text = ClienteSelecionado.CPF_CNPJ;
                    tRazaoSocial.Text = ClienteSelecionado.RazaoSocial;
                    tNomeFantasia.Text = ClienteSelecionado.NomeFantasia;
                    tIEERG.Text = ClienteSelecionado.IE_RG;
                    cTipoPessoa.SelectedValue = ClienteSelecionado.TipoPessoa;
                    tContato.Text = ClienteSelecionado.Contato;
                    tEmail.Text = ClienteSelecionado.Email;
                    tTelefone.Text = ClienteSelecionado.Telefone;
                    tRamal.Text = ClienteSelecionado.Ramal;
                    tFax.Text = ClienteSelecionado.Fax;
                    tCelular.Text = ClienteSelecionado.Celular;
                    // if (ClienteSelecionado.Inativo == "S")
                    //{
                    //   chInativo.Checked.;
                    //}
                    txtAliquotaImposto.Text = ClienteSelecionado.AliquotaImposto.ToString();
                    ////////////////////////////////////
                    tCCEP.Text = ClienteSelecionado.ECCEP;
                    tCLogradouro.Text = ClienteSelecionado.ECLogradouro;
                    tCComplemento.Text = ClienteSelecionado.ECComplemento;
                    tCNumero.Text = ClienteSelecionado.ECNumero;
                    tCBairro.Text = ClienteSelecionado.ECBairro;
                    cCEstado.SelectedValue = ClienteSelecionado.ECEstado;
                    cCCidades.SelectedValue = ClienteSelecionado.ECCidade;
                    /////////////////////////////////////
                    txtObservacoes.Text = ClienteSelecionado.Observacoes;
                    /////////////////////////////////////
                    tECEP.Text = ClienteSelecionado.EECEP;
                    tELogradouro.Text = ClienteSelecionado.EELogradouro;
                    tEComplemento.Text = ClienteSelecionado.EEComplemento;
                    tENumero.Text = ClienteSelecionado.EENumero;
                    tEComplemento.Text = ClienteSelecionado.EEComplemento;
                    tEBairro.Text = ClienteSelecionado.EEBairro;
                    cEEstado.SelectedValue = ClienteSelecionado.EEEstado;
                    cECidades.SelectedValue = ClienteSelecionado.EECidade;
                    ////////////////////////////////////
                    tTranspCodigo.Text = ClienteSelecionado.TransportadoraPadrao.ToString();
                    btnPedidosCliente.Enabled = true;
                }
            }
            catch
            {
                MessageBox.Show("Erro, Informe o Código do Cliente!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        public void SalvarDadosCliente(string pCodigoCliente)
        {

            try
            {
                Clientes Nc = new Clientes();
                //////////////////////////////////////
                //Validações
                if (tRazaoSocial.Text == "")
                {

                }

                //
                if (tCodigoCliente.Text != "")
                {
                    Nc.Codigo = int.Parse(tCodigoCliente.Text);
                }

                Nc.CPF_CNPJ = tCNPJ.Text;
                Nc.RazaoSocial = tRazaoSocial.Text;
                Nc.NomeFantasia = tNomeFantasia.Text;
                Nc.IE_RG = tIEERG.Text;
                Nc.TipoPessoa = int.Parse(cTipoPessoa.SelectedValue.ToString());
                Nc.Contato = tContato.Text;
                Nc.Email = tEmail.Text;
                Nc.Telefone = tTelefone.Text;
                Nc.Ramal = tRamal.Text;
                Nc.Fax = tFax.Text;
                Nc.Celular = tCelular.Text;
                if (chInativo.Checked)
                {
                    Nc.Inativo = "S";
                }
                else
                {
                    Nc.Inativo = "N";
                }
                Nc.AliquotaImposto = Convert.ToInt32(txtAliquotaImposto.Text);
                ////////////////////////////////////
                Nc.ECCEP = tCCEP.Text;
                Nc.ECLogradouro = tCLogradouro.Text;
                Nc.ECComplemento = tCComplemento.Text;
                Nc.ECNumero = tCNumero.Text;
                Nc.ECBairro = tCBairro.Text;
                Nc.ECEstado = cCEstado.SelectedValue.ToString();
                Nc.ECCidade = int.Parse(cCCidades.SelectedValue.ToString());
                /////////////////////////////////////
                Nc.EECEP = tECEP.Text;
                Nc.EELogradouro = tELogradouro.Text;
                Nc.EEComplemento = tEComplemento.Text;
                Nc.EENumero = tENumero.Text;
                Nc.EEBairro = tEBairro.Text;
                Nc.EEEstado = cEEstado.SelectedValue.ToString();
                Nc.EECidade = int.Parse(cECidades.SelectedValue.ToString());
                ////////////////////////////////////
                if (tTranspCodigo.Text != "")
                {
                    Nc.TransportadoraPadrao = int.Parse(tTranspCodigo.Text);
                }
                ///////////////////////////////////
                Nc.cPais = "BR";
                Nc.Observacoes = txtObservacoes.Text;

                if (pCodigoCliente == "") //Se o codigo for nulo salvo como novo cadastro
                {
                    //Entidades.ObjectStateManager.ChangeObjectState(Nc, EntityState.Added);
                    Entidades.AddObject("Clientes", Nc);
                    Entidades.SaveChanges();
                    MessageBox.Show("Salvo com sucesso", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else // Caso contrario atualizado de acordo com a chave primária
                {
                    int CodigoCliente = int.Parse(tCodigoCliente.Text);
                    var upCliente = (from cli in Entidades.Clientes
                                     where cli.Codigo.Equals(CodigoCliente)
                                     select cli).FirstOrDefault();
                    //////////////////////////////////////
                    if (tCodigoCliente.Text != "")
                    {
                        upCliente.Codigo = int.Parse(tCodigoCliente.Text);
                    }

                    upCliente.CPF_CNPJ = tCNPJ.Text;
                    upCliente.RazaoSocial = tRazaoSocial.Text;
                    upCliente.NomeFantasia = tNomeFantasia.Text;
                    upCliente.IE_RG = tIEERG.Text;
                    upCliente.TipoPessoa = int.Parse(cTipoPessoa.SelectedValue.ToString());
                    upCliente.Contato = tContato.Text;
                    upCliente.Email = tEmail.Text;
                    upCliente.Telefone = tTelefone.Text;
                    upCliente.Ramal = tRamal.Text;
                    upCliente.Fax = tFax.Text;
                    upCliente.Celular = tCelular.Text;
                    if (chInativo.Checked)
                    {
                        upCliente.Inativo = "S";
                    }
                    else
                    {
                        upCliente.Inativo = "N";
                    }
                    upCliente.AliquotaImposto = Convert.ToInt32(txtAliquotaImposto.Text);
                    ////////////////////////////////////
                    upCliente.ECCEP = tCCEP.Text;
                    upCliente.ECLogradouro = tCLogradouro.Text;
                    upCliente.ECComplemento = tCComplemento.Text;
                    upCliente.ECNumero = tCNumero.Text;
                    upCliente.ECBairro = tCBairro.Text;
                    upCliente.ECEstado = cCEstado.SelectedValue.ToString();
                    if (cCCidades.SelectedValue.ToString() == "")
                    {
                        upCliente.ECCidade = 5103403;
                    }
                    else
                    {
                        upCliente.ECCidade = int.Parse(cCCidades.SelectedValue.ToString());
                    }
                    /////////////////////////////////////
                    upCliente.EECEP = tECEP.Text;
                    upCliente.EELogradouro = tELogradouro.Text;
                    upCliente.EEComplemento = tEComplemento.Text;
                    upCliente.EENumero = tENumero.Text;
                    upCliente.EEBairro = tEBairro.Text;
                    upCliente.EEEstado = cEEstado.SelectedValue.ToString();

                    if (cECidades.SelectedValue.ToString() == "")
                    {
                        upCliente.EECidade = 5103403;
                    }
                    else
                    {
                        upCliente.EECidade = int.Parse(cECidades.SelectedValue.ToString());
                    }
                    // = CidadeEnt;
                    ////////////////////////////////////
                    if (tTranspCodigo.Text != "")
                    {
                        upCliente.TransportadoraPadrao = int.Parse(tTranspCodigo.Text);
                    }
                    ////////////////////////////////////
                    upCliente.cPais = "BR";
                    upCliente.Observacoes = txtObservacoes.Text;
                    Entidades.ObjectStateManager.ChangeObjectState(upCliente, EntityState.Modified);
                    Entidades.SaveChanges();
                    MessageBox.Show("Atualizado com sucesso", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch
            {
                MessageBox.Show("Ocorreu um erro ao inserir ou atualizar os dados", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }
        #endregion

        private void frmClientes_Load(object sender, EventArgs e)
        {
            TipoPessoa();
            EstadosEnderecoCliente();
            EstadosEnderecoEntrega();
            btnPedidosCliente.Enabled = false;
        }

        private void cCEstado_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cCEstado.SelectedValue.ToString() != "Siav.UnidadesDaFederacao")
            {
                CidadesCliente(cCEstado.SelectedValue.ToString());
            }

        }

        private void cEEstado_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cEEstado.SelectedValue.ToString() != "Siav.UnidadesDaFederacao")
            {
                CidadesEntrega(cEEstado.SelectedValue.ToString());
            }
        }

        private void bCbtnCEP_Click(object sender, EventArgs e)
        {

        }

        private void bEBtnCep_Click(object sender, EventArgs e)
        {

        }

        private void btnCopiarEndereco_Click(object sender, EventArgs e)
        {
            CopiaEnderecoParaEntrega();
        }
        private void btnTransDados_Click(object sender, EventArgs e)
        {
            TransportadoraDados(tTranspCodigo.Text);
        }

        private void frmClientes_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.F3:
                    btnPesquisaCliente_Click(sender, e);
                    break;
                case Keys.F4:
                    btnLocalizarTransportadoras_Click(sender, e);
                    break;
                case Keys.F10:
                    btnSalvar_Click(sender, e);
                    break;
                case Keys.Escape:
                    btnSair_Click(sender, e);
                    break;
                //case Keys.Enter:
                //    this.SelectNextControl(this.ActiveControl, !e.Shift, true, true, true);
                //    break;
                case Keys.F11:
                    btnPedidosCliente_Click(sender, e);
                    break;
            }
        }

        private void btnLocalizarTransportadoras_Click(object sender, EventArgs e)
        {
            Transportadoras.ShowDialog();
            TransportadoraDados(Transportadoras.CodigoSelecionado);

        }

        private void btnSair_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            SalvarDadosCliente(tCodigoCliente.Text);
        }

        private void BtnCarregaCliente_Click(object sender, EventArgs e)
        {
            CarregaCliente(tCodigoCliente.Text);
        }

        private void tCNPJ_Validating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (tCNPJ.Text == "")
            {
                Error.SetError(tCNPJ, "Informe um CPF ou CNPJ");
                e.Cancel = true;

            }
            else
            {
                Error.SetError(tCNPJ, "");
            }
        }

        private void tRazaoSocial_Validating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (tRazaoSocial.Text == "")
            {
                Error.SetError(tRazaoSocial, "Informe a Razão Social");
                e.Cancel = true;
            }
            else
            {
                Error.SetError(tRazaoSocial, "");
            }
        }

        private void tNomeFantasia_Validating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (tNomeFantasia.Text == "")
            {
                Error.SetError(tNomeFantasia, "Informe um Nome Fantasia / Apelido");
                e.Cancel = true;
            }
            else
            {
                Error.SetError(tNomeFantasia, "");
            }
        }

        private void cTipoPessoa_Validating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (cTipoPessoa.SelectedValue.ToString() == "")
            {
                Error.SetError(cTipoPessoa, "Informe o tipo de Pessoa: Fisica / Juridica ");
                e.Cancel = true;
            }
            else
            {
                Error.SetError(cTipoPessoa, "");
            }
        }

        private void tTelefone_Validating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (tTelefone.Text == "")
            {
                Error.SetError(tTelefone, "Informe um Telefone para contato");
                e.Cancel = true;
            }
            else
            {
                Error.SetError(tTelefone, "");
            }
        }

        private void tCCEP_Validating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (tCCEP.Text == "")
            {
                Error.SetError(tCCEP, "Informe um CEP Válido");
                e.Cancel = true;
            }
            else
            {
                Error.SetError(tCCEP, "");
            }
        }

        private void tECEP_Validating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (tECEP.Text == "")
            {
                Error.SetError(tECEP, "Informe um CEP válido");
                e.Cancel = true;
            }
            else
            {
                Error.SetError(tECEP, "");
            }
        }

        private void btnPesquisaCliente_Click(object sender, EventArgs e)
        {
            using (frmPesquisaCliente PesqCliente = new frmPesquisaCliente())
            {
                PesqCliente.ShowDialog();
                CarregaCliente(PesqCliente.CodigoSelecionado);
            }
            if (tTranspCodigo.Text != "")
            {
                TransportadoraDados(tTranspCodigo.Text);
            }
        }

        private void tCNPJ_Leave(object sender, EventArgs e)
        {
            if (tCNPJ.TextLength == 11)
            {
                var vValidacao = Validacoes.ValidarDvCpf(tCNPJ.Text);
                if (vValidacao == false)
                {
                    Validacoes.Erro("Erro, CPF inválido");
                }
            }
            if (tCNPJ.TextLength == 14)
            {
                var vValidacao = Validacoes.ValidaDvCnpj(tCNPJ.Text);
                if (vValidacao == false)
                {
                    Validacoes.Erro("Erro, CNPJ inválido");
                }
            }

            var VerificaExistencia = Entidades.Clientes.Where(doc => doc.CPF_CNPJ.Equals(tCNPJ.Text)).ToList();
            try
            {
                if (VerificaExistencia.Count > 0)
                {
                    throw new Exception();
                }
            }
            catch
            {
                Validacoes.Erro("Cliente já cadastrado, verifique!");
            }
        }

        private void btnPedidosCliente_Click(object sender, EventArgs e)
        {
            using (frmPesquisaPedidos PesqPedidos = new frmPesquisaPedidos())
            {
                PesqPedidos.txtParametro.Text = tRazaoSocial.Text;
                PesqPedidos.FormClientes = "SIM";
                PesqPedidos.ShowDialog();
            }
        }

        private void cCEstado_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            if (cCEstado.SelectedValue.ToString() != "Siav.UnidadesDaFederacao")
            {
                CidadesCliente(cCEstado.SelectedValue.ToString());
            }

        }

        private void cEEstado_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            if (cEEstado.SelectedValue.ToString() != "Siav.UnidadesDaFederacao")
            {
                CidadesEntrega(cEEstado.SelectedValue.ToString());
            }

        }

        private void tCCEP_TextChanged(object sender, EventArgs e)
        {

        }

        private void bCbtnCEP_Click_1(object sender, EventArgs e)
        {
            DataSet dsX = new DataSet();
            DataRow drX;
            try
            {
                dsX.ReadXml(@"http://www.buscarcep.com.br/?cep=" + tCCEP.Text + "&formato=xml&chave=1RAxnIBpXj1hTPlfMf2rYOahQkseHE/");
            }
            catch
            {
                MessageBox.Show("Não foi possível encontrar o WebService do site: www.buscarcep.com.br. \n\n Verifique sua Conexão de Internet !" + "\r\n", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            drX = dsX.Tables["retorno"].Rows[0]; // Captura a 1ª linha da tabela do XML
            en.Resul = int.Parse(drX["resultado"].ToString()); //Captura o resultado do WS
            if (en.Resul == 1) // O cep foi localizado
            {
                en.TipoLogradouro = drX["tipo_logradouro"].ToString();
                en.Logradouro = drX["logradouro"].ToString();
                en.Bairro = drX["bairro"].ToString();
                en.Cidade = drX["cidade"].ToString();
                en.UF = drX["uf"].ToString();
                en.IBGE = drX["ibge_municipio_verificador"].ToString();

                tCLogradouro.Text = String.Format("{0} {1}", en.TipoLogradouro, en.Logradouro);
                tCBairro.Text = en.Bairro;
                cCEstado.SelectedValue = en.UF;
                cCCidades.SelectedValue = int.Parse(en.IBGE);

                tCComplemento.Focus();
            }
            else if (en.Resul == -1)
            {
                //Limpar();
                MessageBox.Show("Cep não encontrado !" + Environment.NewLine, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else if (en.Resul == -2)
            {
                //Limpar();
                MessageBox.Show("Formato de CEP inválido !" + Environment.NewLine, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else if (en.Resul == -3)
            {
                //Limpar();
                MessageBox.Show("Busca de CEP congestionada. \n Aguarde alguns segundos e tente novamente. !" + "\r\n", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else if (en.Resul == -4)
            {
                // Limpar();
                MessageBox.Show("IP Banido. \n contate o administrador !" + Environment.NewLine, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else if (en.Resul == -5)
            {

                MessageBox.Show("Chave banida. contate o administrador !" + Environment.NewLine, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {

                MessageBox.Show("Erro na busca de CEP !" + Environment.NewLine, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bEBtnCep_Click_1(object sender, EventArgs e)
        {
            DataSet dsX = new DataSet();
            DataRow drX;
            try
            {
                dsX.ReadXml(String.Format(@"http://www.buscarcep.com.br/?cep={0}&formato=xml&chave=1RAxnIBpXj1hTPlfMf2rYOahQkseHE/", tECEP.Text));
            }
            catch
            {
                MessageBox.Show("Não foi possível encontrar o WebService do site: www.buscarcep.com.br. \n\n Verifique sua Conexão de Internet !" + "\r\n", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            drX = dsX.Tables["retorno"].Rows[0]; // Captura a 1ª linha da tabela do XML
            en.Resul = int.Parse(drX["resultado"].ToString()); //Captura o resultado do WS
            if (en.Resul == 1) // O cep foi localizado
            {
                en.TipoLogradouro = drX["tipo_logradouro"].ToString();
                en.Logradouro = drX["logradouro"].ToString();
                en.Bairro = drX["bairro"].ToString();
                en.Cidade = drX["cidade"].ToString();
                en.UF = drX["uf"].ToString();
                en.IBGE = drX["ibge_municipio_verificador"].ToString();

                tELogradouro.Text = String.Format("{0} {1}", en.TipoLogradouro, en.Logradouro);
                tEBairro.Text = en.Bairro;
                cEEstado.SelectedValue = en.UF;
                cECidades.SelectedValue = int.Parse(en.IBGE);

                tEComplemento.Focus();
            }
            else if (en.Resul == -1)
            {
                MessageBox.Show("Cep não encontrado !" + Environment.NewLine, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else if (en.Resul == -2)
            {
                MessageBox.Show("Formato de CEP inválido !" + Environment.NewLine, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else if (en.Resul == -3)
            {
                MessageBox.Show("Busca de CEP congestionada. \n Aguarde alguns segundos e tente novamente. !" + "\r\n", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else if (en.Resul == -4)
            {
                MessageBox.Show("IP Banido. \n contate o administrador !" + Environment.NewLine, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else if (en.Resul == -5)
            {
                MessageBox.Show("Chave banida. contate o administrador !" + Environment.NewLine, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                MessageBox.Show("Erro na busca de CEP !" + Environment.NewLine, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        private void btnCopiarEndereco_Click_1(object sender, EventArgs e)
        {
            CopiaEnderecoParaEntrega();
        }

        private void tCNPJ_TextChanged(object sender, EventArgs e)
        {
            //if (tCNPJ.TextLength > 11)
            //{
            //    tIEERG.Enabled = true;
            //}
           // else
            //{
            //    tIEERG.Enabled = false;
            //}
        }

        private void tIEERG_Leave(object sender, EventArgs e)
        {

            if (ConsisteInscricaoEstadual(tIEERG.Text, cCEstado.SelectedValue.ToString()) != 0)
            {
                MessageBox.Show("IE Inválida para " + cCEstado.SelectedValue);
                tIEERG.BackColor = Color.Red;
            }
            else
            {
                tIEERG.BackColor = Color.White;
            }
        }

        private void btnLimparTexto_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Tem certeza que deseja apagar todas as observações desse Cliente?", "Questão", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                try
                {
                    int IDCliente = Convert.ToInt32(tCodigoCliente.Text);
                    var vObs = (from cliente in Entidades.Clientes
                                where cliente.Codigo == IDCliente
                                select cliente).FirstOrDefault();

                    vObs.Observacoes = null;
                    txtObservacoes.Text = string.Empty;

                    Entidades.ObjectStateManager.ChangeObjectState(vObs, EntityState.Modified);
                    Entidades.SaveChanges();

                    Validacoes.Informacao("Observações excluidas com sucesso");
                }
                catch
                {
                    Validacoes.Erro("Erro ao executar a tarefa.");
                }
            }
        }
    }
}
